home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Network Support Library
/
RoseWare - Network Support Library.iso
/
apidev
/
shotbl.arc
/
WINDOW.C
< prev
next >
Wrap
Text File
|
1988-11-18
|
4KB
|
173 lines
/*****************************************************************************
*
* Program Name: VIDEO MODE/CURSOR/WINDOW ROUTINES
*
* Filename: window.c
*
* Date Created: November 18, 1988
*
* Version: 1.0
*
* Programmers: Thomas Brough
*
* Files used:
*
* Date Modified:
*
* Modifications:
*
* Comments:
*
****************************************************************************/
#include <dos.h>
DrawWindow(upperLeftRow,upperLeftCol,lowerRightRow,lowerRightCol,destseg,attr)
int upperLeftRow,upperLeftCol,lowerRightRow,lowerRightCol,destseg;
char attr;
{
struct SREGS segs;
char tempword[255];
int upperLeft,upperRight,lowerLeft,lowerRight,srcoff,srcseg,destoff,i=0;
unsigned int mode;
segread(&segs);
srcseg = segs.ds;
srcoff = (int)&tempword[0];
upperLeft = ((upperLeftRow - 1) * 160) + ((upperLeftCol - 1) * 2);
upperRight = ((upperLeftRow - 1) * 160) + ((lowerRightCol - 1) * 2);
lowerLeft = ((lowerRightRow - 1) * 160) + ((upperLeftCol - 1) * 2);
lowerRight = ((lowerRightRow -1) * 160 ) + ((lowerRightCol - 1) * 2);
tempword[0] = 0xd5;
tempword[1] = attr;
movedata(srcseg,srcoff,destseg,upperLeft,2); /* draw upper left corner */
tempword[0] = 0xb8;
tempword[1] = attr;
movedata(srcseg,srcoff,destseg,upperRight,2); /* draw upper right corner */
tempword[0] = 0xd4;
tempword[1] = attr;
movedata(srcseg,srcoff,destseg,lowerLeft,2); /* draw lower left corner */
tempword[0] = 0xbe;
tempword[1] = attr;
movedata(srcseg,srcoff,destseg,lowerRight,2); /* draw lower right corner */
for(i=0;i < (upperRight-upperLeft-2);i += 2)
{
tempword[i] = 0xcd;
tempword[i+1] = attr;
}
movedata(srcseg,srcoff,destseg,upperLeft+2,(upperRight - upperLeft - 2) ); /*draw top of window */
movedata(srcseg,srcoff,destseg,lowerLeft+2,(upperRight - upperLeft - 2) ); /*draw bottom of window */
for(destoff=(upperLeft+160);destoff<lowerLeft;destoff=destoff+160)
{
tempword[0] = 0xb3;
tempword[1] = attr;
movedata(srcseg,srcoff,destseg,destoff,2);
movedata(srcseg,srcoff,destseg,destoff+upperRight-upperLeft,2);
}
}
int SetVideoSegmentAddress(mode,destseg)
int mode,*destseg;
{
switch (mode)
{
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6: *destseg = 0xB800;
break;
case 7: *destseg = 0xB000;
break;
case 8:
case 9:
case 10:
case 11:
case 12:*destseg = 0xB800;
break;
case 13:
case 14:
case 15:
case 16:*destseg = 0xA000;
break;
default:*destseg = 0xB000;
break;
}
}
int GetVideoMode()
{
unsigned int mode;
union REGS inr,outr;
inr.h.ah = 0x0F;
int86(0x10,&inr,&outr);
mode = outr.h.al;
return(mode);
}
int PrintStringAttr(string,attr,destoff,destseg)
char string[];
int *destseg,*destoff;
int *attr;
{
int srcseg,srcoff,i=0,j=0;
char tempword[255];
struct SREGS segs;
segread(&segs);
srcseg = segs.ds;
srcoff = (int)&tempword[0];
for (i=0;i < (strlen(string) * 2);i += 2)
tempword[i] = string[j++];
for (i=1;i < (strlen(string) * 2);i += 2)
tempword[i] = (char)attr;
movedata(srcseg,srcoff,destseg,destoff,(strlen(string)*2));
}
int PrintCharAttr(character,attr,destoff,destseg)
unsigned char *character;
int *destseg,*destoff;
int *attr;
{
int srcseg,srcoff;
char tempword[2];
struct SREGS segs;
segread(&segs);
srcseg = segs.ds;
srcoff = (int)&tempword[0];
tempword[0] = *character+48;
tempword[1] = (char)attr;
movedata(srcseg,srcoff,destseg,destoff,2);
}
RemoveCursor()
{
union REGS inregs,outregs;
inregs.h.ch = 32;
inregs.h.ah = 1;
int86(16,&inregs,&outregs);
}
RestoreCursor( mode )
int mode;
{
union REGS inregs,outregs;
if ( mode )
{
inregs.h.ch = 6; /* for color display */
inregs.h.cl = 7;
}
else
{
inregs.h.ch = 11; /* for monochrome display */
inregs.h.cl = 13;
}
inregs.h.ah = 1;
int86(16,&inregs,&outregs);
}